package br.com.rhweb.util;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JOptionPane;

import org.hibernate.HibernateException;
import org.hibernate.Session;

import br.com.rhweb.dao.Dao;
import br.com.rhweb.dao.IDao;
import br.com.rhweb.hibernate.HibernateUtil;
import br.com.rhweb.modelos.Funcionario;
import br.com.rhweb.modelos.FuncionarioPK;
import br.com.rhweb.modelos.Estado_Civil;
import br.com.rhweb.modelos.Pessoa;
import br.com.rhweb.modelos.Raca;
import br.com.rhweb.modelos.Situacao_Funcionario;
import br.com.rhweb.modelos.Unidade_de_Trabalho;
import br.com.rhweb.modelos.Vinculo;

public class MontarDadosEmpregaticios {

	public static void main(String[] args) {
		PreparedStatement pstm ;
		final ResultSet rs;

		//Consulta Tabela de Funcionarios
		String sql = "SELECT MATR," +
				" CPF," +
				" SIT_FUNC," +
				" VINCULO," +
				" COD_UNID," +
				" DT_ADM," +
				" DT_AFAST," +
				" VAL_SALA" +
				" FROM Funcionarios WHERE SIT_FUNC = '01'" +
				" ORDER BY CPF";
		
		try {
			pstm = ConexaoJDBC.getConnection().prepareStatement(sql);
			rs = pstm.executeQuery();
			new Thread(){
				public void run(){
					try {
						while(rs.next()){							
							Session s = HibernateUtil.getSessionfactory().openSession();
							
							IDao<Funcionario> daoDadoEmpregaticios;
							IDao<Funcionario> daoFuncionario;
							IDao<Situacao_Funcionario> daoSituacao;
							IDao<Vinculo> daoVinculo;
							IDao<Unidade_de_Trabalho> daoUnidade;
							
							FuncionarioPK dadosEmpregaticiosPK;
							Funcionario dadosEmpregaticios;

							daoDadoEmpregaticios = new Dao<Funcionario>(s, Funcionario.class);
							daoFuncionario = new Dao<Funcionario>(s, Funcionario.class);
							daoSituacao = new Dao<Situacao_Funcionario>(s, Situacao_Funcionario.class);
							daoVinculo = new Dao<Vinculo>(s, Vinculo.class);
							daoUnidade = new Dao<Unidade_de_Trabalho>(s, Unidade_de_Trabalho.class);
							
							//Funcionario funcionario = daoFuncionario.load(rs.getString("CPF"));
							Pessoa funcionario = new Pessoa();
							funcionario.setCpf(rs.getString("CPF"));
							Situacao_Funcionario situacao = daoSituacao.load(Integer.parseInt(rs.getString("SIT_FUNC")));
							Vinculo vinculo = daoVinculo.load(Integer.parseInt(rs.getString("VINCULO") == null ? "11" : rs.getString("VINCULO")));
							Unidade_de_Trabalho unidade = daoUnidade.load(Integer.parseInt(rs.getString("COD_UNID") == null ? "96" : rs.getString("COD_UNID")));
							
							System.out.println("VALORES OBTIDOS COM O LOAD");
							System.out.print("FUNCIONARIO: CPF: "+funcionario.getCpf());
							System.out.println(" | FUNCIONARIO: NOME: "+funcionario.getNome());
							
							System.out.print("SITUACAO: ID: "+situacao.getId());
							System.out.println(" | SITUACAO: DESCRICAO: "+situacao.getDescricao());
							
							System.out.print("VINCULO: ID: "+vinculo.getId());
							System.out.println(" | VINCULO: DESCRICAO: "+vinculo.getDescicao());
							
							System.out.print("UNIDADE: ID: "+unidade.getId());
							System.out.println(" | UNIDADE: DESCRICAO: "+unidade.getDescricao());
							
							System.out.println("FIM VALORES OBTIDOS COM O LOAD");
							
							dadosEmpregaticiosPK = new FuncionarioPK();
							dadosEmpregaticiosPK.setFuncionario(funcionario);
							dadosEmpregaticiosPK.setMatricula(rs.getString("MATR"));
							
							dadosEmpregaticios = new Funcionario();
							dadosEmpregaticios.setCpf_matricula(dadosEmpregaticiosPK);
							dadosEmpregaticios.setSituacao(situacao);
							dadosEmpregaticios.setVinculo(vinculo);
							dadosEmpregaticios.setUnidadeTrabalho(unidade);
							dadosEmpregaticios.setDataAdmissao(rs.getDate("DT_ADM"));
							dadosEmpregaticios.setDataDemissao(rs.getDate("DT_AFAST"));
							dadosEmpregaticios.setSalario(rs.getDouble("VAL_SALA"));
							
							System.out.println(dadosEmpregaticios.getCpf_matricula().toString());
							
							s.beginTransaction();
							daoDadoEmpregaticios.save(dadosEmpregaticios);						
							s.getTransaction().commit();						
							try{
								sleep(5);
							}catch (Exception e) {
								System.out.println("Erro: "+e.getMessage());
							}
						}
					} catch (HibernateException e) {
						System.out.println("Hibernate Exception Message: "+e.getMessage());
						System.out.println("Hibernate Exception Cause: "+e.getCause());
					} catch (SQLException e) {
						System.out.println("SQLException Exception Message: "+e.getMessage());
						System.out.println("SQLException Exception Cause: "+e.getCause());
					}
				}	
			}.start();	

			ConexaoJDBC.getConnection().close();
			
		} catch (SQLException e) {
			//s.getTransaction().rollback();
			System.out.println("Erro: "+e.getMessage());
		}		
	}
	
}
